package it.okkam.rivelamaps;

import java.util.ArrayList;
import java.util.Iterator;

public class Mappa {
	
	public double getZoomLevel(){
		ParticelleConCambiamento pcc = new ParticelleConCambiamento();
		ArrayList<ParticellaCatastale> particelleCambiamento = pcc.getParticelleCambiamento();
		double laMax = 0;
		double laMin = 0;
		double loMax = 0;
		double loMin = 0;
		int i=0;
		
		Iterator<ParticellaCatastale> iPart = particelleCambiamento.iterator();
		while (iPart.hasNext()){
			ParticellaCatastale pc = iPart.next();
			if (i == 0){
				laMax = pc.getCentro().getY();
				laMin = laMax;
				loMax = pc.getCentro().getX();
				loMin = loMax;
			}
			else {
				if (laMax < pc.getCentro().getY()){
					laMax = pc.getCentro().getY();					
				}
				
				if (laMin > pc.getCentro().getY()){
					laMin = pc.getCentro().getY();					
				}
				
				if (loMax < pc.getCentro().getX()){
					loMax = pc.getCentro().getX();					
				}
				
				if (loMin > pc.getCentro().getX()){
					loMin = pc.getCentro().getX();					
				}			
			}i++;
						
		}
		double dist = (6371 * Math.acos(Math.sin(laMin / 57.2958) * Math.sin(laMax / 57.2958) + 
	            (Math.cos(laMin / 57.2958) * Math.cos(laMax / 57.2958) * Math.cos((loMax / 57.2958) - (loMin / 57.2958)))));
		//System.out.println("-------------------------------------"+dist);
		double zoom = Math.floor(8 - Math.log(1.6446 * dist / Math.sqrt(2 * (900 * 900))) / Math.log (2));
		//System.out.println("-------------------------------------"+zoom);
		return zoom;
	}
	
	public static Punto calcolaCentroMappa ( ArrayList<ParticellaCatastale> particelleCambiamento){
		Punto punto = new Punto();
		double laMax = 0;
		double laMin = 0;
		double loMax = 0;
		double loMin = 0;
		int i=0;
		System.out.println("ciao11");
		Iterator<ParticellaCatastale> iPart = particelleCambiamento.iterator();
		System.out.println();
		while (iPart.hasNext()){
			ParticellaCatastale pc = iPart.next();
			if (i == 0){
				System.out.println("ciao");
				laMax = pc.getCentro().getY();
				laMin = laMax;
				loMax = pc.getCentro().getX();
				loMin = loMax;
			}
			else {
				if (laMax < pc.getCentro().getY()){
					laMax = pc.getCentro().getY();					
				}
				
				if (laMin > pc.getCentro().getY()){
					laMin = pc.getCentro().getY();					
				}
				
				if (loMax < pc.getCentro().getX()){
					loMax = pc.getCentro().getX();					
				}
				
				if (loMin > pc.getCentro().getX()){
					loMin = pc.getCentro().getX();					
				}			
			}i++;
						
		}
		if (i < 2){
			punto.setX(loMax);
			punto.setY(laMax);			
		} else {
			punto.setX(calcolaMedia(loMin, loMax));
			punto.setY(calcolaMedia(laMin, laMax));
			} 
		return punto;
	}
	
	public static String getCentroLo (String codiceComune){
		String lo = null;
		String loFull = null;
		Punto punto = new Punto();
		ParticelleConCambiamento pcc = new ParticelleConCambiamento();			
		
		ArrayList<ParticellaCatastale> particelleCambiamento = pcc.getParticelleCambiamentoCodCom(codiceComune);
		punto = calcolaCentroMappa(particelleCambiamento);
		loFull = Double.toString(punto.getY());
		lo = loFull.substring(0, 9);		
		
		return lo;		
	}
	
	public static String getCentroLa (String codiceComune){
		String la = null;
		String laFull = null;
		Punto punto = new Punto();
		ParticelleConCambiamento pcc = new ParticelleConCambiamento();
			
		
		ArrayList<ParticellaCatastale> particelleCambiamento = pcc.getParticelleCambiamentoCodCom(codiceComune);
		punto = calcolaCentroMappa(particelleCambiamento);
		System.out.println(punto.getX());
		laFull = Double.toString(punto.getX());
		System.out.println(laFull);
		la = laFull.substring(0, 9);
		
		return la;		
	}
	
	public static double calcolaMedia (double primo , double secondo){
		double media=0;
		media = (primo + secondo)/2;
		return media;
		}

	public static String convertiComune (String comune){
		String convertiComune ="";
		if (comune.equalsIgnoreCase("Folgaria"))
			convertiComune = "E1FW"; 
		if (comune.equalsIgnoreCase("Trento"))
			convertiComune = "E1AA"; 
		if (comune.equalsIgnoreCase("Dro"))
			convertiComune = "E1FH"; 
		if (comune.equalsIgnoreCase("Brentonico"))
			convertiComune = "E1BU"; 
		
		
		return convertiComune;
		
	}
}
